"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/3/21 8:32
@Description : 如何通过python操作数据库 实现数据的crud

数据库的作用:  管理数据  数据的持久化   文件操作  SQL
    关系型数据      学生信息  用户信息    通过表格的形式存储的数据
    非关系型数据    文本  音频 视频
关系型数据库
     1.oracle  商用   性能更好
     2.mysql   开源免费  中小型企业的使用    sql
非关系型数据库
    1.redis      key:value    中间件  缓存中间件   一致  基于内存的存储    11万次
       A  ->  select  *  from  user    ->redis  null   -> mysql  -> redis  user_list: users
       B  ->  select  *  from  user    ->redis   users   -> 返回结果
       ....
    2. MQ  消息队列  中间件 rabbitmq  rocketmq  短信   下单   支付  短信   扣除库存


python 实现web项目开发

浏览器  ->http请求   --> web服务器 python  接口  select   python语言操作数据库

pymysql    -> mysql   add  update
cx_oracle  -> oracle  insert  edit

DB-API  规范   提供一个统一的操作入口 实现数据的操作   多态   解耦

操作步骤：
1. 导入模块
    mysqlclient   pymysql  cx_Oracle
2. 获取数据库连接
3. 获取操作sql语句的对象  游标
4. 编写sql,执行sql
5. 结果处理    增删改  影响的行数  查询  结果集
6. 释放资源   连接  游标

"""
# mysqlclient 实现数据库连接

"""
import  MySQLdb
# 获取连接
mysql_connect = MySQLdb.connect(
    host='localhost',    # mysql数据库的ip地址
    port=3306,    # mysql数据库默认端口
    user='root',   # 管理员用户
    passwd='root',  # 密码
    db='python2511',  # 需要连接板的数据库名
    charset='utf8'   # 连接的编码格式  避免乱码问题
)
print(mysql_connect.cursor())
"""
"""
import pymysql

#  获取连接
mysql_connect = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    passwd='root',
    db='python2511',
    charset='utf8'
)
print(mysql_connect.cursor())

# 编写sql
#  在python2511库中添加一张user表  id(主键)  username  password  char  varchar2
str_sql = ("create table user("
           "id int auto_increment primary key,"
           "username varchar(20) not null,"
           "password varchar(20) not null)")

# 发送sql  获取操作sql语句的对象  游标
mysql_cursor = mysql_connect.cursor()
result = mysql_cursor.execute(str_sql)
# 处理结果
print(result)

# 释放资源
mysql_cursor.close()
mysql_connect.close()

"""

# 3.12 python  oracledb
import cx_Oracle

oracle_connect = cx_Oracle.connect('SCOTT', 'scott', '127.0.0.1:1521/ORCL')
oracle_cursor = oracle_connect.cursor()
str_sql = "select * from emp"
lines = oracle_cursor.execute(str_sql)
rows_data = oracle_cursor.fetchall()
# 遍历结果集
for row in rows_data:
    print(row)
